package com.atguigu.mediator.smarthouse;

/**
 * @Description: 中介者模式
 * @Author lixiaolong
 * @Date 2023/10/13
 */
public class Client {

	/**
	 * 1、抽象中介者 --> 定义同事对象到中介对象的接口
	 * 2、具体中介者 --> 持有多个同事对象，并且接收 同事对象的 方法，执行对应的操作，实现抽象方法
	 * 3、抽象同事类
	 * 4、具体同事类 --> 依赖中介者，只知道自己的方法，不了解其他同事的方法
	 *
	 * @param args
	 */
	public static void main(String[] args) {
		// 创建中介者
		Mediator mediator = new ConcreteMediator();

		//创建 具体同事，并且向中介者 注册自己
		Alarm alarm = new Alarm(mediator, "alarm");

		//创建 具体同事，并且向中介者 注册自己
		CoffeeMachine coffeeMachine = new CoffeeMachine(mediator,
				"coffeeMachine");

		//创建 具体同事，并且向中介者 注册自己
		Curtains curtains = new Curtains(mediator, "curtains");
		TV tV = new TV(mediator, "TV");

		// 具体同事 闹钟 发出消息 然后根据闹钟发出的消息 中介者来调动其他同事 完成任务
		alarm.SendAlarm(0);
		coffeeMachine.FinishCoffee();
		alarm.SendAlarm(1);
	}

}
